/**----------工具类------------**/
import moment from "moment";


/**
 * 解决toFixed四舍五入问题
 * @param {Number | String} num 
 * @returns {String}
 */
export function toFixed(num, s) {
  let times = Math.pow(10, s);
  let des = 0;
  if (num >= 0)
    des = num * times + 0.5;
  else
    des = num * times - 0.5;
  des = parseInt(des, 10) / times;
  return des + '';
}

/**
 * 验证是否是数字
 */
export function isNumber(val) {
  var regPos = /^\d+(\.\d+)?$/; //非负浮点数
  var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
  if (regPos.test(val) || regNeg.test(val)) {
    return true;
  } else {
    return false;
  }
}


/**
* 数组元素交换位置
* @param {array} arr 数组
* @param {number} index1 添加项目的位置
* @param {number} index2 删除项目的位置
* index1和index2分别是两个数组的索引值，即是两个要交换元素位置的索引值，如1，5就是数组中下标为1和5的两个元素交换位置
*/
export function swapArray(arr, index1, index2) {
  arr[index1] = arr.splice(index2, 1, arr[index1])[0];
  return arr;
}

/**
 * 获取今天的0点的时间戳精确到毫秒
 */
export function getTodayStartTimeStamp() {
  let t = moment().format("YYYY/MM/DD");
  return new Date(t).getTime();
}

/**
 * 获取今天的23:59:59的时间戳精确到毫秒
 */
export function getTodayEndTimeStamp() {
  let t = getTodayStartTimeStamp()
  return t + 24 * 60 * 60 * 1000 - 1;
}

/**
 * 获取7天23:59:59的时间戳精准到毫秒
 */
export function getSevenTimeStamp() {
  let t = getTodayStartTimeStamp()
  return t + 7 * (24 * 60 * 60 * 1000) - 1;
}

/**
 * 数组转对象
 */
export function arrayToObject(arr, type) {
  let list = {}, info = getInfoByType(type);;
  for (let key in arr) {
    list[arr[key][info.id]] = arr[key][info.name];
  }
  return list;
}


/**
 * 校验手机号是否正确
 * @param {*} phone 手机号
 */
function isPhone(phone) {
  let flag = /^1[3456789]\d{9}$/.test(phone);
  return flag;
}

/**
 * 判断是否为空对象
 * @param {*} obj 要判断的对象
 */
export function emptyObject(obj) {
  return Object.keys(obj).length === 0;
}


/**
 * 转换为数字 
 * @param {Number | String} num 需要计算的数字
 * @param {Number | String} s 保留几位小数点
 * @returns {String}
 */
export function toFloat(num, s = 2) {
  if (!isNumber(num))
    return null;
  let res = toFixed(num, s);
  let arr = res.split('.');
  let result = 0;
  if (arr.length > 1) {
    let times = Math.pow(10, s - arr[1].length);
    result = arr[0] + '.' + arr[1] + (times + '').substr(1);
  } else {
    let times = Math.pow(10, s);
    result = arr[0] + '.' + (times + '').substr(1);
  }
  return parseFloat(result);
}

/**
 * 转换为数字 特殊处理 NaN null 等值返回0
 * @param {Number | String} num 需要计算的数字
 * @param {Number | String} s 保留几位小数点
 * @returns {String}
 */
export function toDouble(num, s = 2) {
  if (!num) {
    return 0;
  } else {
    return toFloat(num, s);
  }
}

/**
 * 加 特殊处理 
 * @param {Number | String} a 
 * @param {Number | String} b 
 * @return {Number | String}  
 */
export function plus(a, b) {
  return toFloat(toFloat(a, 2) + toFloat(b, 2), 2);
}

/**
 * 获取文字的宽度
 */
export function getTextWidth(text, fontSize = 14) {
  let canvas = document.createElement("canvas");
  canvas.className = "canvas";
  canvas.height = "160";
  canvas.width = "320";
  let ctx = canvas.getContext("2d"); //上下文，绘图环境
  ctx.fillStyle = "rgba(96,98,102,0.1)";
  ctx.font = `${fontSize}px sans-serif`;
  return ctx.measureText(text).width;
}

function getRad(d) {
  return (d * Math.PI) / 180.0;
}

export default {
  toFixed,
  toFloat,
  plus,
  toDouble,
  swapArray,
  getTodayStartTimeStamp,
  getTodayEndTimeStamp,
  getSevenTimeStamp,
  isNumber,
  arrayToObject,
  isPhone,
  emptyObject,
  getTextWidth
}